﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace DiaryPlanner
{
    public partial class LogIn : Form
    {
        string id, pass;
        public LogIn()
        {
            InitializeComponent();            
        }

        private void button1_Click(object sender, EventArgs e)//로그인
        {
            id = textBoxID.Text.ToString();
            pass = textBoxPW.Text.ToString();
            login_db(id, pass);
            textBoxID.Text = "";
            textBoxPW.Text = "";
            return;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            NewID nid = new NewID();
            nid.ShowDialog();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            FindPW fpw = new FindPW();
            fpw.ShowDialog();
            
        }

        private void LogIn_Load(object sender, EventArgs e)
        {

        }
        private void login_db(string id, string pass)
        {
            try
            {
                string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" //연결하는 객체의 공급자명(확장자명)
                                         + "data source = "  //데이터 소스=(경로입력하라는거)
                                         + Application.StartupPath ///상대경로 읽어옴
                                         + @"\diaryplannerdb.mdb";//실제 데이터베이스 파일이름

                string commandString = "Select * from [member]";//member테이블에 있는 모든필드들을 모두 검색해라.

                OleDbDataAdapter DBAdapter ////DataSet을 채우고 데이터 소스를 업데이트하는 데 사용되는 데이터 명령 집합 및 데이터베이스 연결하게 하는 함수
                    = new OleDbDataAdapter(commandString, connectionString);//connectionString이라는 경로와 쿼리명령을 동적할당

                OleDbCommandBuilder myCommandBuilder ///연결된 데이터베이스에서 DataSet의 변경 내용을 조정하는 데 사용되는 단일 테이블 명령을 자동으로 생성합니다
                    = new OleDbCommandBuilder(DBAdapter);

                DataSet DS = new DataSet(); //DS라는 데이터 셋 동적할당

                DBAdapter.Fill(DS, "member"); //DS라는 데이터셋에 새로운 member 테이블에 추가 또는 갱신하겠다고 알림.

                DataTable aTable = DS.Tables["member"];//member테이블을 불러와 aTable을 새로 생성해서 저장

                DataColumn[] PrimaryKey = new DataColumn[1];

                PrimaryKey[0] = aTable.Columns["id"]; //a컬럼을 기본키를 설정

                aTable.PrimaryKey = PrimaryKey;//기본키 할당

                DataRow currRow = aTable.Rows.Find(id);
                if (pass == currRow["pass"].ToString())
                {
                    UserProfile.Instance().userId = id;
                    UserProfile.Instance().setting = db_skin();
                    this.Close();
                }
                else
                {
                    MessageBox.Show("비밀번호가 일치하지 않습니다");
                }
            }
            catch (DataException)
            {
                MessageBox.Show("아이디 또는 비밀번호가 잘못 되었습니다");
            }
            catch (Exception)
            {
                MessageBox.Show("아이디 또는 비밀번호가 잘못 되었습니다");
            }
        }
        private string db_skin()
        {

            try //예외처리문
            {
                string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" //연결하는 객체의 공급자명(확장자명)
                                        + "data source = "  //데이터 소스=(경로입력하라는거)
                                        + Application.StartupPath ///상대경로 읽어옴
                                        + @"\diaryplannerdb.mdb";//실제 데이터베이스 파일이름

                string commandString = "Select * from [member] ";//member테이블에 있는 모든필드들을 모두 검색해라.

                OleDbDataAdapter DBAdapter ////DataSet을 채우고 데이터 소스를 업데이트하는 데 사용되는 데이터 명령 집합 및 데이터베이스 연결하게 하는 함수
                    = new OleDbDataAdapter(commandString, connectionString);//connectionString이라는 경로와 쿼리명령을 동적할당

                OleDbCommandBuilder myCommandBuilder ///연결된 데이터베이스에서 DataSet의 변경 내용을 조정하는 데 사용되는 단일 테이블 명령을 자동으로 생성합니다
                    = new OleDbCommandBuilder(DBAdapter);

                DataSet DS = new DataSet(); //DS라는 데이터 셋 동적할당

                DBAdapter.Fill(DS, "member"); //DS라는 데이터셋에 새로운 member 테이블에 추가 또는 갱신하겠다고 알림.

                DataTable aTable = DS.Tables["member"];//member테이블을 불러와 aTable을 새로 생성해서 저장

                for (int i = 0; i < aTable.Rows.Count; i++)
                {
                    if (aTable.Rows[i].ItemArray[0].ToString() == UserProfile.Instance().userId)
                    {
                        return aTable.Rows[i].ItemArray[4].ToString();
                    }
                }
            }
            catch (DataException DE) //DataException에러 발생확인하는 catch문
            {
                MessageBox.Show(DE.Message); //DataExpception 에러 발생시 메세지박스로 에러값을 출력해라.
            }
            catch (Exception DE) //Exception에러 발생확인하는 catch문
            {
                MessageBox.Show(DE.Message);//Expception 에러 발생시 메세지박스로 에러값을 출력해라.
            }

            return "a";//default
            
        }
        
       



    }
}
